package com.ruoyi.common.utils;

import com.ruoyi.common.exception.CustomException;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.List;

/**
 * @program: ruoyi
 * @description: 图片处理工具类
 * @author: Chenhenan
 * @create: 2021-11-29 09:29
 **/
public class ImageUtils {

    /**
     * 给图片添加多个文字水印、可设置水印文字旋转角度
     * @param source 需要添加水印的图片路径（如：F:/images/6.jpg）
     * @param output 添加水印后图片输出路径（如：F:/images/）
     * @param imageName 图片名称（如：11111）
     * @param imageType 图片类型（如：jpg）
     * @param color 水印文字的颜色
     * @param words 水印文字
     * @param degree 水印文字旋转角度，为null表示不旋转
     */
    public static void markImageByMoreText(File file, String output, String imageName,
                                             String imageType, Color color, List<String> words, Integer degree) {
        try {
            //读取原图片信息
            //File file = new File(source);
            if (!file.isFile()) {
                throw new CustomException("不是一个图片文件！");
            }
            Image img = ImageIO.read(file);
            //图片宽
            int width = img.getWidth(null);
            //图片高
            int height = img.getHeight(null);
            System.out.println("图片宽："+width+"高："+height);
            //文字大小
            int size = width/20;
            //加水印
            BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics2D g = bi.createGraphics();
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                    RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            g.drawImage(img, 0, 0, width, height, null);
            //设置水印字体样式
            Font font = new Font("宋体", Font.PLAIN, size);
            int addrDivisor = 30;
            Font font1 = new Font("宋体", Font.PLAIN, width/addrDivisor);//地址用

            //根据图片的背景设置水印颜色
            g.setColor(color);
            //int x = width/3;//中间
            int x = 0;
            int y = size;
            int space = height/size;
            /*if(width < height){
                degree = 90;
            }*/
            if (null != degree) {
                //设置水印旋转
                g.rotate(Math.toRadians(degree),(double) bi.getWidth() / 2, (double) bi.getHeight() / 2);
            }
            for(int i = 0; i <words.size(); i++){
                String word = words.get(i);

                if(i == 3){//地址信息 且大于20字
                    g.setFont(font1);
                    if(word.length() > addrDivisor){
                        String word1 = word.substring(0, addrDivisor);
                        //水印位置
                        g.drawString(word1, x, y);
                        y+=size;
                        String word2 = word.substring(addrDivisor);
                        //水印位置
                        g.drawString(word2, x, y);
                        y+=size;
                    }else{
                        g.drawString(word, x, y);
                        y+=size;
                    }

                }else{
                    g.setFont(font);
                    //水印位置
                    g.drawString(word, x, y);
                    y+=size;
                }

            }

            g.dispose();
            //输出图片
            // File sf = new File(output, imageName+"."+imageType);
            File sf = new File(output);//直接覆盖原图
            ImageIO.write(bi, imageType, sf); // 保存图片

        } catch (Exception e) {
            e.printStackTrace();
            throw new CustomException("照片添加水印失败！");
        }
    }

}
